﻿using System.Collections.Generic;
using TestBat.IModels.Domain;

namespace TestBat.IModels.Models
{
    public interface ITraineeGroupModel : IModel
    {
        /// <summary>
        /// get all trainee groups
        /// </summary>
        /// <returns>a list of all trainee groups</returns>
        IList<ITraineeGroup> GetAll();

        /// <summary>
        /// save/persist a trainee group
        /// </summary>
        /// <param name="taskFolder">the trainee group to persist</param>
        void Save(ITraineeGroup traineeGroup);

        /// <summary>
        /// remove the trainee group from the DB
        /// </summary>
        /// <param name="traineeGroup">the trainee group to remove</param>
        void Delete(ITraineeGroup traineeGroup);

        /// <summary>
        /// revert a trainee group back to database-state
        /// </summary>
        /// <param name="traineeGroup">the trainee group</param>
        void Revert(ITraineeGroup traineeGroup);

        /// <summary>
        /// get all trainees inside this trainee group
        /// </summary>
        /// <param name="traineeGroup">the trainee group</param>
        /// <returns>all trainees inside the group</returns>
        IList<ITrainee> GetTrainees(ITraineeGroup traineeGroup);

        IList<ITraineeGroup> GetAllAvailable(ITrainee trainee);
        IList<ITraineeGroup> GetAllAssociated(ITrainee trainee);
    }
}
